package com.lemobar.pay.model.alipay.request;

import com.lemobar.pay.constants.AliPayConstants;
import com.lemobar.pay.enums.AliPayMethodEnum;
import com.lemobar.pay.model.alipay.ExtendParams;
import com.lemobar.pay.model.alipay.GoodsDetail;
import lombok.Data;

import java.util.List;

/**
 * alipay.trade.pay
 *  https://opendocs.alipay.com/open/02ekfp?scene=32
 */
@Data
public class AliPayTradePayRequest {
    private String appId;
    private String method = AliPayMethodEnum.ALIPAY_TRADE_PAY.getCode();
    private String format = AliPayConstants.FORMAT_JSON;
    private String charset = AliPayConstants.CHARSET_UTF8_LOWER;
    private String signType = AliPayConstants.SIGN_TYPE_RSA2;
    private String sign;
    private String timestamp;
    private String version = AliPayConstants.API_VERSION;
    private String notifyUrl;
    private String appAuthToken;
    private String bizContent;

    @Data
    public static class BizContent {
        /**
         * 商户订单号。
         * 由商家自定义，64个字符以内，仅支持字母、数字、下划线且需保证在商户端不重复。
         * (必选)
         */
        private String outTradeNo;

        /**
         * 订单总金额，单位为元
         * (必选)
         */
        private Double totalAmount;

        /**
         * 订单标题
         * (必选)
         */
        private String subject;
        /**
         * 支付场景。
         * 枚举值：
         * -bar_code：当面付条码支付场景；
         * -security_code：当面付刷脸支付场景，对应的auth_code为fp开头的刷脸标识串；
         * 默认值为bar_code。
         * (必选)
         */
        private String scene;

        /**
         * 支付授权码。
         * 当面付场景传买家的付款码（25~30开头的长度为16~24位的数字，实际字符串长度以开发者获取的付款码长度为准）或者刷脸标识串（fp开头的35位字符串）。
         */
        private String authCode;


        /**
         * 产品码。
         * 商家和支付宝签约的产品码。
         * 当面付场景下，如果签约的是当面付快捷版，则传 OFFLINE_PAYMENT;
         * 其它支付宝当面付产品传 FACE_TO_FACE_PAYMENT；
         * 不传则默认使用FACE_TO_FACE_PAYMENT。
         */
        private String productCode;

        /**
         * 卖家支付宝用户ID。
         */
        private String sellerId;



        /**
         * 订单包含的商品列表信息，json格式。
         */
        private List<GoodsDetail> goodsDetail;

        /**
         * 业务扩展参数
         */
        private ExtendParams extendParams;

        /**
         * 优惠明细参数，通过此属性补充营销参数。
         */
        //private PromoParam promoParams;


        /**
         * 商户门店编号。
         */
        private String storeId;

        /**
         * 商户操作员编号。
         */
        private String operatorId;

        /**
         * 商户机具终端编号。	。
         */
        private String terminalId;

        /**
         * 返回参数选项。
         * 商户通过传递该参数来定制同步需要额外返回的信息字段，数组格式。如：["fund_bill_list","voucher_detail_list","discount_goods_detail"]	。
         */
        private String[] queryOptions;

    }
}
